home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Just Call Me Internet
/
Just Call Me Internet.iso
/
prog
/
atari
/
m2
/
cat3src
/
cat
/
listman.d
< prev
next >
Wrap
Text File
|
1997-10-26
|
8KB
|
192 lines
DEFINITION MODULE ListMan;
FROM SYSTEM IMPORT ADDRESS;
FROM MagicSys IMPORT sBITSET, sINTEGER, lINTEGER;
FROM GrafBase IMPORT Rectangle;
(* Handelt scrollbare Listen in Fenstern und Dialogboxen *)
(*$H+ auch lokale Funktionen mglich *)
(*$Z+ *)
TYPE
selectEntryProc = PROCEDURE ( (* entry: *) ADDRESS,
(* env: *) ADDRESS,
(* line: *) INTEGER) : BOOLEAN;
(* Wird aufgerufen, wenn ein Eintrag selektiert wurde.
* Gibt zurck, ob der Dialog verlassen werden soll,
* falls es in einem Dialog ist.
* TRUE = verlassen
*)
isSelectedProc = PROCEDURE ( (* entry: *) ADDRESS,
(* env: *) ADDRESS) : BOOLEAN;
(* Wird aufgerufen, um festzustellen, ob ein Eintrag selektiert
* ist oder nicht
*)
entryIsSelectableProc = PROCEDURE ( (* entry, env: *) ADDRESS, ADDRESS) : BOOLEAN;
(* Wird aufgerufen, um festzustellen, ob ein Eintrag disabled ist oder nicht *)
drawEntryProc = PROCEDURE ( (* entry: *) ADDRESS,
(* env: *) ADDRESS,
(* x: *) sINTEGER,
(* y: *) sINTEGER,
(* offset:*) sINTEGER,
(* clip: *) Rectangle);
(* Wird aufgerufen, um einen Eintrag zu zeichen.
* x und y enthalten die Position, offset ist ein "Offset" vom linken
* Rand aus, cliprect mu bercksichtigt werden!
* Wenn der entry NIL ist, dann mu ein leeres Rechteck gezeichnet
* werden
*)
selectMode = (smNone, smOne, smMulti);
(* Listenverwaltung auch ber Prozedurvariablen *)
TYPE ResetProc = PROCEDURE ( (* list : *) ADDRESS);
(* Setzt Liste zurck auf Anfang *)
MoveProc = PROCEDURE ( (* list : *) ADDRESS) : ADDRESS;
(* Liefert nchstes oder vorheriges Element,
* NIL ansonsten
*)
CountProc = PROCEDURE ( (* list : *) ADDRESS,
VAR (* length *) lINTEGER,
VAR (* width *) sINTEGER);
(* Gibt die Anzahl der Eintrge und die Breite der
* Liste zurck *)
TYPE LISTINFO;
PROCEDURE InitList (list : ADDRESS;
env : ADDRESS;
selectEntry : selectEntryProc;
isSelectedEntry : isSelectedProc;
isSelectableEntry : entryIsSelectableProc;
drawEntry : drawEntryProc;
resetList : ResetProc;
nextList,
prevList : MoveProc;
countList : CountProc;
select : selectMode;
VAR listInfo : LISTINFO): BOOLEAN;
(* Von den beiden folgenden Prozeduren mu mindestens eine nach
* der Initialisierung der Liste aufgerufen werden
*)
PROCEDURE SetListWdwSpecs (listInfo: LISTINFO;
wdwHandle : sINTEGER;
area : Rectangle;
voffset : sINTEGER;
vsize : sINTEGER;
hstep : sINTEGER;
maxwidth : sINTEGER): BOOLEAN;
(* Setzt weitere Informationen fr die Liste.
* wdwHandle: Das Fenster, in dem die Liste dargestellt wird
* area: Arbeitsbereich, in dem die Liste dargestellt wird
* voffset: Abstand zwischen zwei Eintrgen
* vsize : Hhe eines Eintrages
* hstep : Wie breit ist eine Spalte
* maxwidth: maximale Breite eines Eintrags
*)
PROCEDURE SetListDialSpecs(listInfo: LISTINFO;
tree : ADDRESS;
entryBox : sINTEGER;
boxBack : sINTEGER;
voffset : sINTEGER;
vsize : sINTEGER;
hstep : sINTEGER;
maxwidth : sINTEGER): BOOLEAN;
(* Setzt weitere Informationen fr die Liste.
* tree: Der Baum, in dem die Liste dargestellt wird
* entryBox: Objektindex fr das Objekt, in dem alle Objekte
* dargestellt werden
* boxBack: Objektindex des Hintergrundes der Box (fr Slider)
* voffset: Abstand zwischen zwei Eintrgen
* vsize : Hhe eines Eintrages
* hstep : Wie breit ist eine Spalte
* maxwidth: maximale Breite eines Eintrags (wenn = 0, dann wird kein
* horizontaler Slider eingesetzt)
*)
PROCEDURE FreeList (listInfo: LISTINFO): BOOLEAN;
PROCEDURE DrawList (listInfo: LISTINFO; clip: Rectangle);
(* Zeichnet die Liste neu und auch die Slider, Clipping wird
* beachtet
*)
PROCEDURE ListClick (listInfo: LISTINFO; x, y: INTEGER; kstate: BITSET;
clicks: sINTEGER): lINTEGER;
(* Wird aufgerufen, wenn ein Mausklick stattfand. Gibt zurck,
* ob ein Eintrag angeklickt wurde (>= 0) oder ob
* der Click auerhalb des Bereiches war (-1)
* oder ob der Click behandelt wurde (-2)
* Wenn ein Eintrag angeklickt wurde, dann wird dieser auch selektiert,
* falls notwendig.
*)
PROCEDURE ListUpdateEntry (listInfo : LISTINFO; entry: lINTEGER);
(* Einen bestimmten Eintrag neu zeichnen lassen, falls ntig
*)
PROCEDURE ListInvertEntry (listInfo: LISTINFO; entry: lINTEGER);
(* Der Eintrag entry wurde (extern) selektiert, den Rest handhaben
* Ntzlich fr Autolocator
*)
PROCEDURE ListDeselEntry (listInfo: LISTINFO; entry: lINTEGER);
(* Deselektiert den Eintrag entry. Ebenfalls fr Autolocator
*)
PROCEDURE ListScroll2Selection (listInfo: LISTINFO; draw: BOOLEAN);
(* Scrollt die Liste so, da der erste selektierte Eintrag
* sichtbar ist. draw: auch wirklich zeichnen!
*)
PROCEDURE ListPgDown (listInfo : LISTINFO);
PROCEDURE ListLnDown (listInfo : LISTINFO);
PROCEDURE ListPgUp (listInfo : LISTINFO);
PROCEDURE ListLnUp (listInfo : LISTINFO);
PROCEDURE ListLnRight (listInfo: LISTINFO);
PROCEDURE ListPgRight (listInfo: LISTINFO);
PROCEDURE ListLnLeft (listInfo : LISTINFO);
PROCEDURE ListPgLeft (listInfo : LISTINFO);
PROCEDURE ListFirst (listInfo: LISTINFO);
PROCEDURE ListLast (listInfo: LISTINFO);
(* Selektion innerhalb der Liste verschieben *)
PROCEDURE ListSelUp (listInfo: LISTINFO): lINTEGER;
PROCEDURE ListSelPgUp (listInfo: LISTINFO): lINTEGER;
PROCEDURE ListSelDown (listInfo: LISTINFO): lINTEGER;
PROCEDURE ListSelPgDown (listInfo: LISTINFO): lINTEGER;
PROCEDURE ListSelFirst (listInfo: LISTINFO): lINTEGER;
PROCEDURE ListSelLast (listInfo: LISTINFO): lINTEGER;
PROCEDURE ListListElems (listInfo: LISTINFO): lINTEGER;
(* Gibt die Anzahl der Listenelemente zurck
*)
PROCEDURE ListFindEntry (listInfo: LISTINFO; index : lINTEGER) : ADDRESS;
(* Gibt die Adresse des Eintrags index zurck
*)
PROCEDURE ListFirstSelected (listInfo: LISTINFO) : lINTEGER;
(* GIbt den ersten selektieren Eintrag zurck, -1 im Fehlerfall
*)
(* Die Funktionen brauche ich gar nicht:
(* Neue Position in der Liste setzen. Pos: 0..1000 *)
PROCEDURE ListVSlide (listInfo : LISTINFO; pos: sINTEGER);
PROCEDURE ListHSlide (listInfo : LISTINFO; pos: sINTEGER);
*)
END ListMan.